1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.base;
18
19 import static java.util.concurrent.TimeUnit.MICROSECONDS;
20 import static java.util.concurrent.TimeUnit.MILLISECONDS;
21 import static java.util.concurrent.TimeUnit.NANOSECONDS;
22
23 import com.google.common.annotations.GwtCompatible;
24 import com.google.common.annotations.GwtIncompatible;
25 import com.google.common.testing.FakeTicker;
26
27 import junit.framework.TestCase;
28
29
30
31
32
33
34 @GwtCompatible(emulated = true)
35 public class StopwatchTest extends TestCase {
36
37 private final FakeTicker ticker = new FakeTicker();
38 private final Stopwatch stopwatch = new Stopwatch(ticker);
39
40 public void testCreateStarted() {
41 Stopwatch startedStopwatch = Stopwatch.createStarted();
42 assertTrue(startedStopwatch.isRunning());
43 }
44
45 public void testCreateUnstarted() {
46 Stopwatch unstartedStopwatch = Stopwatch.createUnstarted();
47 assertFalse(unstartedStopwatch.isRunning());
48 assertEquals(0, unstartedStopwatch.elapsed(NANOSECONDS));
49 }
50
51 public void testInitialState() {
52 assertFalse(stopwatch.isRunning());
53 assertEquals(0, stopwatch.elapsed(NANOSECONDS));
54 }
55
56 public void testStart() {
57 assertSame(stopwatch, stopwatch.start());
58 assertTrue(stopwatch.isRunning());
59 }
60
61 public void testStart_whileRunning() {
62 stopwatch.start();
63 try {
64 stopwatch.start();
65 fail();
66 } catch (IllegalStateException expected) {
67 }
68 assertTrue(stopwatch.isRunning());
69 }
70
71 public void testStop() {
72 stopwatch.start();
73 assertSame(stopwatch, stopwatch.stop());
74 assertFalse(stopwatch.isRunning());
75 }
76
77 public void testStop_new() {
78 try {
79 stopwatch.stop();
80 fail();
81 } catch (IllegalStateException expected) {
82 }
83 assertFalse(stopwatch.isRunning());
84 }
85
86 public void testStop_alreadyStopped() {
87 stopwatch.start();
88 stopwatch.stop();
89 try {
90 stopwatch.stop();
91 fail();
92 } catch (IllegalStateException expected) {
93 }
94 assertFalse(stopwatch.isRunning());
95 }
96
97 public void testReset_new() {
98 ticker.advance(1);
99 stopwatch.reset();
100 assertFalse(stopwatch.isRunning());
101 ticker.advance(2);
102 assertEquals(0, stopwatch.elapsed(NANOSECONDS));
103 stopwatch.start();
104 ticker.advance(3);
105 assertEquals(3, stopwatch.elapsed(NANOSECONDS));
106 }
107
108 public void testReset_whileRunning() {
109 ticker.advance(1);
110 stopwatch.start();
111 assertEquals(0, stopwatch.elapsed(NANOSECONDS));
112 ticker.advance(2);
113 assertEquals(2, stopwatch.elapsed(NANOSECONDS));
114 stopwatch.reset();
115 assertFalse(stopwatch.isRunning());
116 ticker.advance(3);
117 assertEquals(0, stopwatch.elapsed(NANOSECONDS));
118 }
119
120 public void testElapsed_whileRunning() {
121 ticker.advance(78);
122 stopwatch.start();
123 assertEquals(0, stopwatch.elapsed(NANOSECONDS));
124
125 ticker.advance(345);
126 assertEquals(345, stopwatch.elapsed(NANOSECONDS));
127 }
128
129 public void testElapsed_notRunning() {
130 ticker.advance(1);
131 stopwatch.start();
132 ticker.advance(4);
133 stopwatch.stop();
134 ticker.advance(9);
135 assertEquals(4, stopwatch.elapsed(NANOSECONDS));
136 }
137
138 public void testElapsed_multipleSegments() {
139 stopwatch.start();
140 ticker.advance(9);
141 stopwatch.stop();
142
143 ticker.advance(16);
144
145 stopwatch.start();
146 assertEquals(9, stopwatch.elapsed(NANOSECONDS));
147 ticker.advance(25);
148 assertEquals(34, stopwatch.elapsed(NANOSECONDS));
149
150 stopwatch.stop();
151 ticker.advance(36);
152 assertEquals(34, stopwatch.elapsed(NANOSECONDS));
153 }
154
155 public void testElapsed_micros() {
156 stopwatch.start();
157 ticker.advance(999);
158 assertEquals(0, stopwatch.elapsed(MICROSECONDS));
159 ticker.advance(1);
160 assertEquals(1, stopwatch.elapsed(MICROSECONDS));
161 }
162
163 public void testElapsed_millis() {
164 stopwatch.start();
165 ticker.advance(999999);
166 assertEquals(0, stopwatch.elapsed(MILLISECONDS));
167 ticker.advance(1);
168 assertEquals(1, stopwatch.elapsed(MILLISECONDS));
169 }
170
171 public void testElapsedMillis() {
172 stopwatch.start();
173 ticker.advance(999999);
174 assertEquals(0, stopwatch.elapsed(MILLISECONDS));
175 ticker.advance(1);
176 assertEquals(1, stopwatch.elapsed(MILLISECONDS));
177 }
178
179 public void testElapsedMillis_whileRunning() {
180 ticker.advance(78000000);
181 stopwatch.start();
182 assertEquals(0, stopwatch.elapsed(MILLISECONDS));
183
184 ticker.advance(345000000);
185 assertEquals(345, stopwatch.elapsed(MILLISECONDS));
186 }
187
188 public void testElapsedMillis_notRunning() {
189 ticker.advance(1000000);
190 stopwatch.start();
191 ticker.advance(4000000);
192 stopwatch.stop();
193 ticker.advance(9000000);
194 assertEquals(4, stopwatch.elapsed(MILLISECONDS));
195 }
196
197 public void testElapsedMillis_multipleSegments() {
198 stopwatch.start();
199 ticker.advance(9000000);
200 stopwatch.stop();
201
202 ticker.advance(16000000);
203
204 stopwatch.start();
205 assertEquals(9, stopwatch.elapsed(MILLISECONDS));
206 ticker.advance(25000000);
207 assertEquals(34, stopwatch.elapsed(MILLISECONDS));
208
209 stopwatch.stop();
210 ticker.advance(36000000);
211 assertEquals(34, stopwatch.elapsed(MILLISECONDS));
212 }
213
214 @GwtIncompatible("String.format()")
215 public void testToString() {
216 stopwatch.start();
217 assertEquals("0.000 ns", stopwatch.toString());
218 ticker.advance(1);
219 assertEquals("1.000 ns", stopwatch.toString());
220 ticker.advance(998);
221 assertEquals("999.0 ns", stopwatch.toString());
222 ticker.advance(1);
223 assertEquals("1.000 \u03bcs", stopwatch.toString());
224 ticker.advance(1);
225 assertEquals("1.001 \u03bcs", stopwatch.toString());
226 ticker.advance(8998);
227 assertEquals("9.999 \u03bcs", stopwatch.toString());
228 stopwatch.reset();
229 stopwatch.start();
230 ticker.advance(1234567);
231 assertEquals("1.235 ms", stopwatch.toString());
232 stopwatch.reset();
233 stopwatch.start();
234 ticker.advance(5000000000L);
235 assertEquals("5.000 s", stopwatch.toString());
236 stopwatch.reset();
237 stopwatch.start();
238 ticker.advance((long) (1.5 * 60 * 1000000000L));
239 assertEquals("1.500 min", stopwatch.toString());
240 stopwatch.reset();
241 stopwatch.start();
242 ticker.advance((long) (2.5 * 60 * 60 * 1000000000L));
243 assertEquals("2.500 h", stopwatch.toString());
244 stopwatch.reset();
245 stopwatch.start();
246 ticker.advance((long) (7.25 * 24 * 60 * 60 * 1000000000L));
247 assertEquals("7.250 d", stopwatch.toString());
248 }
249
250 }